Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
2.9
-
None
-
None
Description
When calling
XMPParser.parseXMP(new StreamSource(new StringReader(xmpString)))
with XMP XML that contains facial recognition data, a NullPointerException is thrown:
Caused by: javax.xml.transform.TransformerException: java.lang.NullPointerException: Cannot invoke "org.apache.xmlgraphics.xmp.PropertyAccess.setProperty(org.apache.xmlgraphics.xmp.XMPProperty)" because the return value of "org.apache.xmlgraphics.xmp.XMPHandler.getCurrentProperties()" is null at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:789) at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:395) at org.apache.xmlgraphics.xmp.XMPParser.parseXMP(XMPParser.java:63) at com.hillert.image.metadata.service.support.MetadataExtractor.getXMPMetadata(MetadataExtractor.java:146) ... 71 more Caused by: java.lang.NullPointerException: Cannot invoke "org.apache.xmlgraphics.xmp.PropertyAccess.setProperty(org.apache.xmlgraphics.xmp.XMPProperty)" because the return value of "org.apache.xmlgraphics.xmp.XMPHandler.getCurrentProperties()" is null at org.apache.xmlgraphics.xmp.XMPHandler.startElement(XMPHandler.java:157) at java.xml/com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.closeStartTag(ToXMLSAXHandler.java:206) at java.xml/com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.characters(ToXMLSAXHandler.java:526) at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.characters(AbstractSAXParser.java:555) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:485) at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889) at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825) at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1224) at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:637) at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:666) at java.xml/com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:780) ... 74 more
In order to reproduce, take 1 image with with at least 1 person in it and import it into Adobe Light Room Classic. Export the original image with all Metadata intact.
Calling:
XMPParser.parseXMP(new StreamSource(new StringReader(xmpString)))
will fail. Taking an image without any humans will work.
As far as I can tell the following additional XML is present in the image with the human face:
<mwg-rs:Regions rdf:parseType="Resource"> <mwg-rs:AppliedToDimensions stDim:h="3456" stDim:unit="pixel" stDim:w="4608"/> <mwg-rs:RegionList> <rdf:Bag> <rdf:li> <rdf:Description mwg-rs:Rotation="0.00000" mwg-rs:Type="Face"> <mwg-rs:Area stArea:h="0.27734" stArea:w="0.20801" stArea:x="0.57178" stArea:y="0.34180"/> </rdf:Description> </rdf:li> </rdf:Bag> </mwg-rs:RegionList> </mwg-rs:Regions>
Once you remove:
<rdf:Description mwg-rs:Rotation="0.00000" mwg-rs:Type="Face"> <mwg-rs:Area stArea:h="0.27734" stArea:w="0.20801" stArea:x="0.57178" stArea:y="0.34180"/> </rdf:Description>
the parsing of the XMP XML data will succeed.